home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 44 / Amiga Format CD44 (1999-08-26)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-10].iso / -in_the_mag- / basics / ace / nap.lha / NAP_(d).guide (.txt) < prev    next >
Amigaguide Document  |  1997-05-19  |  31KB  |  880 lines

  1. @database "NAP/NAP.guide"
  2. @master "NAP/NAP.dok"
  3. @node Main "Einleitung"
  4. @TOC Inhaltsverzeichnis
  5. @NEXT Aufruf
  6.  @{"NAP - New ACE Preprocessor" link Inhaltsverzeichnis}                              @{"Version 2.02" link History}
  7.  Einleitung
  8.  NAP ist ein Pr
  9. prozessor f
  10. r die Programmiersprache ACE (AmigaBasic
  11.  Compiler with Extras) von David Benn. Momentan existieren drei Pr
  12.  prozessoren f
  13. r ACE:
  14.   (1) APP
  15.       Der mitgelieferte Pr
  16. prozessor. Er entfernt ACE-Kommentare und
  17.       bindet INCLUDE-Dateien ein.
  18.   (2) ACPP
  19.       Die ACE-Version des C-Pr
  20. prozessors CPP.  Die 
  21. nderung besteht
  22.       allerdings nur darin, da
  23.  der Path auf ACE: gesetzt wurde. Die
  24.       St
  25. rke dieses Pr
  26. prozessors liegt darin,  da
  27.  er s
  28. mtliche @{"Di-" link Direktiven}
  29.       @{"rektiven" link Direktiven} (Pr
  30. prozessorkommandos) erkennt. Desweiteren entfernt
  31.       er C-Kommentare.
  32.   (3) NAP
  33.       Dieser Pr
  34. prozessor ist genau f
  35. r  ACE  zugeschneidert. Er er-
  36.       kennt fast alle (einschlie
  37. lich der wichtigsten!)  @{"Direktiven" link Direktiven},
  38.       entfernt ACE-Kommentare  genauso wie C-Kommentare und  besitzt
  39.       desweiteren noch einige Pr
  40. prozessor-unspezifische Routinen.
  41.                                                       @{"Daniel Seifert" link autor}
  42.                               Berlin-Hellersdorf, den 04. Mai 1997
  43. @endnode
  44. @node Inhaltsverzeichnis "AmigaGUIDE Anleitung f
  45. r NAP 2.02"
  46. @TOC Inhaltsverzeichnis
  47. @PREV Main
  48. @NEXT Benutzung
  49.  |\   |       |
  50. |       |
  51. |                        Version 2.02
  52.  | \  |       |____|       |____|                         19.05.1997
  53.  |  \ |       |    |       |
  54.  |   \| e w   |    | C E   |     r e p r o c e s s o r
  55.  Inhaltsverzeichnis:
  56.  @{"Einleitung" link Main}
  57.  @{"Benutzung" link Benutzung}
  58.  @{"Aufruf" link Aufruf}
  59.  @{"Optionen" link Optionen}
  60.  @{"Direktiven" link Direktiven}
  61.  @{"Bekannte Fehler" link bugs}
  62.  @{"Zuk
  63. nftige Versionen" link future}
  64.  @{"Danksagungen" link greetings}
  65.  @{"Copyright" link Copyright}
  66. ber den Autor" link autor}
  67.  @{"History" link history}
  68.  @{"Ende" quit}
  69.  Anmerkung:
  70.   Die Aktionen, die NAP durchf
  71. hrt, und einige Besonderheiten werden
  72.   im jeweiligen Unterkapitel von "@{"Optionen" link Optionen}" erl
  73. utert.
  74. @endnode
  75. @node Abbruch
  76. @TOC Inhaltsverzeichnis
  77.  Sollten Sie irgendwann einmal das Bed
  78. rfnis haben,  NAP  bei  seiner
  79.  Arbeit zu unterbrechen, so k
  80. nnen Sie dies problemlos tun, indem Sie
  81.  CTRL-C dr
  82. cken.
  83. @endnode
  84. @node Benutzung
  85. @TOC Inhaltsverzeichnis
  86. @PREV Inhaltsverzeichnis
  87. @NEXT Aufruf
  88.  Kopieren Sie die neueste Version von NAP nach ACE:BIN/
  89.  Ersetzen Sie dann in Ihrem bas Script  (falls Sie von der Shell  aus
  90.  arbeiten), den Aufruf von APP oder ACPP durch den von NAP. Die Para-
  91.  meter sind dieselben.  Sollten noch  Optionen 
  92. bergeben worden sein,
  93.  so  m
  94. ssen  diese  entfernt  werden  oder  durch  die entsprechenden
  95.  @{"Optionen von NAP" link Optionen} ersetzt werden.
  96.  Falls Sie AIDE von Herbert Breuer benutzen, so geben Sie einfach bei
  97.  der Rubrik  "Precompiler"  unter  "other"  NAP ein und speichern die
  98.  Konfigurationsdatei.
  99. @endnode
  100. @node Aufruf
  101. @TOC Inhaltsverzeichnis
  102. @PREV Benutzung
  103. @NEXT Optionen
  104.  Die  folgenden  2 Abs
  105. tze sind nur wichtig f
  106. r User,  die nicht AIDE
  107.  benutzen:
  108.    NAP kann grunds
  109. tzlich nur von der CLI oder der  Shell  aufgerufen
  110.    werden. Von dort m
  111. ssen ihm mindestens  zwei  Parameter  
  112. bergeben
  113.    werden, n
  114. mlich die Eingabe- und die Ausgabedatei. NAP ist, im Ge-
  115.    gensatz zu ACPP, nicht in der Lage, von der Standardeingabe zu le-
  116.    sen oder zur Standardausgabe zu schreiben.
  117.    Zu beachten ist,  da
  118.  die Ausgabedatei beim Start von NAP gel
  119.    wird.  Wenn eine der beiden Dateien nicht ge
  120. ffnet werden kann, so
  121.    wird mit einer Fehlermeldung abgebrochen.
  122. tzlich zu den eben  genannten Parametern  k
  123. nnen noch @{" Optionen " link Optionen}
  124.  mit 
  125. bergeben werden. Diese m
  126. ssen mit einem Bindestrich eingeleitet
  127.  werden.  Ben
  128. tigt eine Option einen  zus
  129. tzlichen Parameter,  so ist
  130.  dieser direkt  (ohne Leerzeichen)  an die Option dranzuh
  131. ngen.  Nach
  132.  diesem Parameter mu
  133.   immer ein Leerzeichen  folgen.  Darauffolgende
  134.  Optionen m
  135. ssen mit einem neuen Bindestrich eingeleitet werden.  An-
  136.  sonsten ist es egal, an welcher Stelle die Optionen stehen. Sie k
  137.  nen auch ohne weiteres zusammengefa
  138. t werden (-tz anstatt @{"-t" link OptionT} @{"-z" link OptionZ}). Um
  139.  den Konventionen zu folgen, rate ich aber,  die Optionen vor die Da-
  140.  teinamen zu setzen.
  141. @endnode
  142. @node Optionen
  143. @TOC Inhaltsverzeichnis
  144. @PREV Aufruf
  145. @NEXT Buffer
  146.  NAP bietet verschiedene Optionen an. Der Gro
  147. teil von ihnen sind so-
  148.  genannte Schalter,  mit denen bestimmte Aktionen an- oder abgeschal-
  149.  tet werden.
  150.  Die restlichen Optionen ben
  151. tigen noch einen zus
  152. tzlichen Parameter.
  153.  Bei der Angabe von Optionen ist die  Gro
  154. -  und  Kleinschreibung un-
  155.  wichtig.  Achten Sie aber darauf,  da
  156.  das f
  157. r den Parameter <token>
  158.  bei den Optionen -d und -u nicht gilt. (siehe @{"Direktiven" link Direktiven})
  159.  Optionen
  160.   @{"-b<kB>" link Buffer}                   setze Buffergr
  161. e in Kilobytes
  162.   @{"-d<token>[<=value>]" link OptionD}      definiere ein Token
  163.   @{"-p<path>" link Includepath}                 setze Path f
  164. r die Includedateien
  165.   @{"-u<token>" link OptionU}                entfernt ein Token
  166.   @{"-c" link OptionC}   :   Kommentare nicht entfernen
  167.   @{"-e" link OptionE}   :   Fehlermeldungen unterdr
  168.   @{"-h" link OptionH}   :   Hilfetext
  169.   @{"-i" link OptionI}   :   @{"#Define" link Direktiven}s ignorieren
  170.   @{"-l" link OptionL}   :   leere Zeilen nicht zusammenfassen
  171.   @{"-q" link OptionQ}   :   @{"#Define" link Direktiven}s als CONST-Anweisung schreiben
  172.   @{"-s" link OptionS}   :   unbenutzte Strukturen entfernen
  173.   @{"-t" link OptionT}   :   
  174. berwachung anschalten (Tracing)
  175.   @{"-z" link OptionZ}   :   Zeitmessung
  176. @endnode
  177. @node Buffer
  178. @TOC Inhaltsverzeichnis
  179. @PREV Optionen
  180. @NEXT OptionD
  181.  Um NAP schneller und effizienter zu machen,  wurde eine eigene Lese-
  182.  routine geschrieben, welche mit einem @{"Buffer" link DefBuffer} arbeitet.
  183.  Dieser hat standardm
  184. ig eine Gr
  185. e von 100 Kilobytes  (das sind ge-
  186.  nau 102400 Bytes + 5 Bytes f
  187. r die Verwaltung) und wird f
  188. r jede ge-
  189. ffnete Datei angelegt. Grunds
  190. tzlich gilt aber, da
  191.  der Buffer nie-
  192.  mals gr
  193. er als die Datei ist.  Sollte die Datei also kleiner  sein,
  194.  wird nur soviel Speicher reserviert, wie n
  195.  Am schnellsten ist NAP,  wenn es stets die gesamte Datei in den Buf-
  196.  fer schreiben kann und nicht nochmal nachladen mu
  197. . Hundert Kilobyte
  198.  sollten daf
  199. r wirklich genug sein.  F
  200. r Extremisten ist es aber  er-
  201.  laubt, die Buffergr
  202. e bis zu 640 Kilobyte hochzuschrauben. Aber das
  203.  ACE-Programm, da
  204.  diese Gr
  205. e hat, m
  206. chte ich nicht debuggen ;-)
  207.  Wahrscheinlicher ist, da
  208.  man die Buffergr
  209. e mit der -b Option her-
  210.  unterschraubt, zum Beispiel, wenn man nicht soviel Speicher hat.
  211. @endnode
  212. @node DefBuffer "Definition Buffer"
  213. @TOC Inhaltsverzeichnis
  214. @PREV Buffer
  215. @NEXT Buffer
  216.  Buffer : Speicherbereich  (auch  m
  217. glich:  Datei),  in welchen kurz-
  218.           fristig Daten abgelegt werden,  um entweder schnelleren Zu-
  219.           griff zu erhalten  oder um sie f
  220. r weitere Arbeiten  aufzu-
  221.           heben oder zu sammeln.
  222. @endnode
  223. @node OptionD "-d<token>[=value]"
  224. @TOC Inhaltsverzeichnis
  225. @PREV Buffer
  226. @NEXT IncludePath
  227.  Im Prinzip macht diese Option nichts anderes, als wenn man innerhalb
  228.  des Sourcecodes schreiben w
  229.         @{"#DEFINE" link Direktive} <token> <value>
  230.  Sollten Sie [=value] weglassen, so wird die "1" als Wert genommen.
  231. @endnode
  232. @node Includepath "-p<path>"
  233. @TOC Inhaltsverzeichnis
  234. @PREV OptionD
  235. @NEXT OptionU
  236.  Diese Option legt fest, in welchem Path nach den Includedateien ge-
  237.  sucht werden soll. Sie k
  238. nnen 9 verschiedene Paths definieren, all-
  239.  erdings sind 3 bereits vergeben. Bleiben Ihnen also noch 6.
  240.  Bereits definiert sind:  ACEINCLUDE:
  241.                           ACE:
  242.                           ACE:INCLUDE/
  243. @endnode
  244. @node OptionU "-u<token>"
  245. @TOC Inhaltsverzeichnis
  246. @PREV IncludePath
  247. @NEXT OptionC
  248.  Im Prinzip macht diese Option nichts anderes, als wenn man innerhalb
  249.  des Sourcecodes schreiben w
  250.         @{"#UNDEF" link Direktiven} <token>
  251. @endnode
  252. @node OptionC "-c"
  253. @TOC Inhaltsverzeichnis
  254. @PREV OptionU
  255. @NEXT OptionE
  256.  Standardm
  257. ig entfernt ACE alle @{"Kommentare" link Kommentare}, sowohl die ACE-typischen
  258.  als auch die von C.
  259.  Falls Sie diese Option benutzen, l
  260. t NAP die Kommentare aber stehen
  261.  und wandelt nur die C-Kommentare in ACE-Kommentare um (damit es beim
  262.  Kompilieren keinen 
  263. rger gibt :-).
  264. @endnode
  265. @node Kommentare
  266. @TOC Inhaltsverzeichnis
  267. @PREV OptionC
  268. @NEXT OptionC
  269.    NAP erkennt folgende Kommentare:
  270.       '      : Einzeilenkommentar
  271.       { }    : Blockkommentar, kann sich auch 
  272. ber mehrere Zeilen er-
  273.                strecken
  274.       /* */  : Blockkommentar, wird automatisch in { } umgewandelt
  275. @endnode
  276. @node OptionE "-e"
  277. @TOC Inhaltsverzeichnis
  278. @PREV OptionC
  279. @NEXT OptionH
  280.  Beim Bearbeiten der Eingabedatei und der dazugeh
  281. rigen Includedatei-
  282.  en kann es passieren, da
  283.  NAP in ihnen einen @{"Fehler" link Fehler} findet.
  284.  Dieser Fehler f
  285. hrt zwar nicht zum Abbruch, wird aber angezeigt. Mit
  286.  dieser Option unterdr
  287. cken Sie die  Ausgabe der  Fehlermeldung  (aus
  288.  welchem Grund auch immer).
  289.  Auch schwerwiegende Fehler, die zum vorzeitigen Beenden von NAP f
  290.  ren (Speichermangel) werden dann nicht mehr angezeigt.
  291. @endnode
  292. @node Fehler
  293. @TOC Inhaltsverzeichnis
  294. @PREV OptionE
  295. @NEXT OptionE
  296.  - #IF ohne #ENDIF
  297.  - #ELIF au
  298. erhalb von #IF --- #ENDIF
  299.  - zu viele #ENDIF
  300.  - korruptes #DEFINE (Parameter fehlt)
  301.  - Includedatei nicht gefunden (kein @{" Abbruch " link Abbruch}, die Konsequenzen beim
  302.    Kompilieren sollten Ihnen aber klar sein)
  303.  - ...
  304. @endnode
  305. @node OptionH "-h"
  306. @TOC Inhaltsverzeichnis
  307. @PREV OptionE
  308. @NEXT OptionI
  309.  Diese Option gibt einen seitenlangen Text aus,  in dem alle Optionen
  310.  ganz kurz erkl
  311. rt werden. Anschlie
  312. end beendet sich NAP.
  313. @endnode
  314. @node OptionI "-i"
  315. @TOC Inhaltsverzeichnis
  316. @PREV OptionH
  317. @NEXT OptionL
  318.  Normalerweise werden @{"#DEFINE" link Direktiven}s von NAP bearbeitet,  mit dieser Option
  319.  werden #DEFINE Anweisungen aber einfach ignoriert.
  320. @endnode
  321. @node OptionL "-l"
  322. @TOC Inhaltsverzeichnis
  323. @PREV OptionI
  324. @NEXT OptionQ
  325.  Normalerweise fa
  326. t NAP Leerzeilen zusammen. Mit dieser Option schal-
  327.  ten sie diese Funktion aus
  328.  Beachten Sie aber,  da
  329.  eine  Leerzeile nur als solche erkannt wird,
  330.  wenn in ihr absolut kein Zeichen drin steht. (Auch kein Leerzeichen,
  331.  selbst wenn die Zeile dann immer noch leer aussieht!)
  332. @endnode
  333. @node OptionQ "-q"
  334. @TOC Inhaltsverzeichnis
  335. @PREV OptionL
  336. @NEXT OptionS
  337.  Normalerweise werden @{"#DEFINE" link Direktiven}s von NAP bearbeitet,  mit dieser Option
  338. rdet NAP aber ACE diese Arbeit auf.  Das geschieht, indem #DEFINEs
  339.  einfach durch CONSTs ersetzt werden.
  340.  Beachten Sie aber,  da
  341.  dann  keine  Parameter mehr 
  342. bergeben werden
  343. nnen !!! Desweiteren kann es Probleme geben, wenn Sie via @{"#INCLUDE" link Direktiven}
  344.  Includefiles einbinden,  die Strukturen enthalten,  bei  denen  z.B.
  345.  ADDRESS durch NodePtr (was via @{"#DEFINE" link Direktiven} definiert wurde) ersetzt wird
  346.  (was dann nat
  347. rlich bei der Option -q nicht mehr erkannt wird!)
  348. @endnode
  349. @node OptionS "-s"
  350. @TOC Inhaltsverzeichnis
  351. @PREV OptionQ
  352. @NEXT OptionT
  353.  Diese Funktion schaltet eine der herausragendsten Funktionen von NAP
  354.  an :))  NAP entfernt dann n
  355. mlich Strukturen, die nicht benutzt wer-
  356.  den.
  357.  Wem das Entfernen unbenutzter Strukturen d
  358. mlich erscheint (immerhin
  359.  werden die von ACE ja sowieso ignoriert),  sollte sich mal das  fol-
  360.  gende Beispiel durchlesen.
  361.  Man nehme sich das  Beispielsprogramm  GadTools.b,  welches sich ir-
  362.  gendwo im ACE-Archiv herumtreiben mu
  363. .  Jetzt jage man es durch ACPP
  364.  und dann durch NAP.
  365.                   ACPP GadTools.b ram:gt_acpp.b <Return>
  366.                   NAP -s GadTools.b ram:gt_nap.b <Return>
  367.  Na, etwas aufgefallen?  Tja,  gt_nap.b  ist kleiner,  l
  368. t sich auch
  369.  schneller kompilieren. Warum? Geben wir doch mal folgendes ein:
  370.                   NAP -st GadTools.b ram:gt_nap.b <Return>
  371.  Mit der Option @{"-t" link OptionT} schalten Sie n
  372. mlich die 
  373. berwachungsfunktion ein.
  374.  Da kommt jetzt viel Text,  uns interessiert aber blo
  375.  der  Rest.  Da
  376. hlt NAP n
  377. mlich auf, welche Strukturen gebraucht werden und welche
  378.  entfernt werden.
  379.  Da  GadTools.b Dutzende von  Includedateien  einbindet,  kommen dann
  380.  letztendlich ungef
  381. hr 110 (!!) Strukturen zusammen. ABER: Von diesen
  382.  hundertundzehn werden nicht einmal zwanzig gebraucht ...
  383.  Und 
  384. brigens:   F
  385. r Leute mit wenig Speicher macht es schon was aus,
  386.  ob ACE die anderen  90  Strukturen im Speicher behalten mu
  387. , weil es
  388.  ja nicht wissen kann, da
  389.  es sie nicht braucht.
  390. berzeugt ???
  391. @endnode
  392. @node OptionT "-t"
  393. @TOC Inhaltsverzeichnis
  394. @PREV OptionS
  395. @NEXT OptionZ
  396.  Seit v2.00 wurde die -t Option  (t steht f
  397. r TRACE) stark erweitert.
  398.  Sie gibt, w
  399. hrend NAP l
  400. uft, Informationen f
  401. r den User aus,  so da
  402.  der einerseits sehen kann, was NAP da macht,  andererseits aber auch
  403.  sehen kann, welche Datei NAP's Fehler aufdeckt (oder so).
  404.  Ausgegeben wird:
  405.     - Dateinamen der Includedatei, inklusive Dateinummer
  406.     - Auftreten von Definitionen und Deklarationen von Strukturen so-
  407.       wie, welche Strukturen eine andere Struktur noch ben
  408. tigt (nur,
  409.       wenn Option @{"-s" link OptionS} benutzt wird).
  410.     - welche  Strukturen entfernt  werden und welche ben
  411. tigt  werden
  412.       (wiederum nur, wenn @{"-s" link OptionS} benutzt wird).
  413. @endnode
  414. @node OptionZ "-z"
  415. @TOC Inhaltsverzeichnis
  416. @PREV OptionT
  417. @NEXT Direktiven
  418.  Mit dieser Option wird mitgeteilt,  da
  419.   NAP  nach Beendigung seiner
  420.  Arbeit doch bitte angeben soll,  wie lange es gebraucht hat  (in Se-
  421.  kunden!)
  422. @endnode
  423. @node Direktiven
  424. @TOC Inhaltsverzeichnis
  425. @PREV OptionT
  426. @NEXT Bugs
  427.  NAP unterst
  428. tzt folgende Direktiven:
  429.            IF
  430.            IF DEFINED
  431.            IFDEF
  432.            IFNDEF
  433.            ELSE
  434.            ELIF (dasselbe wie ELSE IF, was aber von NAP nicht erkannt
  435.                  wird!)
  436.            ENDIF
  437.            INCLUDE
  438.            DEFINE
  439.            UNDEF
  440.  Nicht erkannt werden folgende Direktiven:
  441.            PRAGMA
  442.            ASSERT
  443.            DEBUG
  444.            NODEBUG
  445.            ERROR
  446.  Meiner Meinung spielen letztere auch keine gro
  447. e Rolle (mal ganz ab-
  448.  gesehen davon, da
  449.  ich nicht wei
  450. , was sie genau bewirken).
  451. r alle, die sich mit den Direktiven noch nicht so genau auskennen,
  452.  hier eine kurze Erl
  453. uterung f
  454. r alle unterst
  455. tzten Direktiven:
  456.  Grunds
  457. tzlich  wird eine  Direktive mit einem Doppelkreuz (#) einge-
  458.  leitet,  da
  459.  am Zeilenanfang steht.  Die  Direktive steht ohne Leer-
  460.  zeichen hinter dem Doppelkreuz. Die meisten Direktiven verlangen zu-
  461. tzlich noch einige Parameter.
  462.  --------------------------------------------------------------------
  463.  IF <expression>
  464.  Expression ist ein @{"mathematischer Ausdruck" link mathAusdruck}.  Sollte dieser  Ausdruck
  465.  logisch wahr sein (kleiner oder gr
  466. er 0), so wird der folgende  Ab-
  467.  schnitt 
  468. bernommen,  anderenfalls  entfernt.  Der  Abschnitt  endet,
  469.  wenn eine ELIF, ELSE oder ENDIF Direktive folgt. IF-Direktiven  d
  470.  fen verschachtelt sein.
  471.  --------------------------------------------------------------------
  472.  IF DEFINED <token>
  473.  Ist wahr, wenn <token> bereits mit DEFINE definiert wurde (s.u.).
  474.  --------------------------------------------------------------------
  475.  IFDEF <token>
  476.  Ist wahr, wenn <token> bereits mit DEFINE definiert wurde (s.u.).
  477.  --------------------------------------------------------------------
  478.  IFNDEF <token>
  479.  Ist wahr, wenn <token> noch nicht mit Define definiert wurde (s.u.).
  480.  --------------------------------------------------------------------
  481.  ELSE
  482.  auf eine IF- oder ELIF-Direktive folgen.  Der folgende Abschnitt
  483.  wird ausgef
  484. hrt,  wenn die Aussage bei der letzen  IF-Direktive  lo-
  485.  gisch  falsch  war.  Beachten Sie,  da
  486.  innerhalb einer IF-Direktive
  487.  nur eine ELSE-Direktive sein darf, NAP da allerdings nicht aufpa
  488.  --------------------------------------------------------------------
  489.  ELIF <expression>
  490.  Kombination von "ELSE IF".  Beachten Sie, da
  491.  ELIF bei NAP nicht be-
  492.  sonders gut implementiert ist.  Fehler bei der Bearbeitung von ELIF-
  493.  Direktiven sind also sehr wahrscheinlich.
  494.  --------------------------------------------------------------------
  495.  ENDIF
  496.  Beendet eine IF-Direktive.
  497.  --------------------------------------------------------------------
  498.  INCLUDE <filename>
  499.  Hier m
  500. ssen die spitzen Klammern 
  501. brigens wirklich um den Dateinamen
  502.  herumbleiben!  Die INCLUDE-Direktive bewirkt, da
  503.  die angegebene Da-
  504.  tei an der momentanen Position eingef
  505. gt wird. Da Includedateien un-
  506.  tereinander verschachtelt sind, ist es sehr gut m
  507. glich, da
  508.  diesel-
  509.  be Datei zweimal eingebunden werden soll. Das wird aber einmal durch
  510.  NAP selbst  und das andere Mal durch den Aufbau der Includedatei un-
  511.  terbunden.
  512.  --------------------------------------------------------------------
  513.  DEFINE <token> <value>
  514.  Definiert <token> als <value>. Wenn Sie zum Beispiel schreiben:
  515.        #DEFINE eins 1
  516.  dann wird ab sofort immer eine 1 eingesetzt, wenn das Wort "eins" im
  517.  Quellcode gefunden wird.
  518.  Beachten Sie, da
  519.  bei <token> zwischen der Gro
  520. - und Kleinschreibung
  521.  unterschieden  wird.  "eins", "EINS" und "Eins" sind also alles ver-
  522.  schiedene Token!!!
  523.  Auf Token werden Sie vor allem in den Includedateien sto
  524. en.  Gucken
  525.  Sie sich doch ein paar davon an und Sie werden verstehen,  warum Sie
  526.  sie brauchen.
  527.  Selbstverst
  528. ndlich k
  529. nnen Sie auch Parameter angeben.  F
  530. gen Sie bei
  531.  Token (ohne Leerzeichen!) eine durch Klammern umschlossene und durch
  532.  Kommas separierte Liste von Variablennamen an und in <value> werden
  533.  diese Variablen dann durch 
  534. bergebene Werte ersetzt.
  535.  Beispiel aus <ACE/ACEdef.h>:
  536.      #define box(x1,y1,x2,y2) LINE (x1,y1)-(x2,y2),,b
  537.      box(10,10,100,200)
  538.  wird zu
  539.      LINE (10,10)-(100,200),,b
  540.  Beachten Sie,  da
  541.  innerhalb von <token> keine Leerzeichen sein d
  542.  fen, dies bei <value> aber nichts ausmacht.
  543.  Wenn  <value>  besonders gro
  544.  ist,  k
  545. nnen Sie es auf mehrere Zeilen
  546.  aufsplitten, indem Sie am Ende der Zeile einen  Backslash  "\"  oder
  547.  eine Tilde "~" schreiben und <value> in der n
  548. chsten Zeile fortsetz-
  549.  en.  Damit  unterst
  550. tzt  NAP sowohl die C- als auch die ACE-typische
  551.  Schreibweise.
  552.  --------------------------------------------------------------------
  553.  UNDEF <token>
  554.  Hebt "#define <token> <value>" wieder auf.
  555.  --------------------------------------------------------------------
  556. @endnode
  557. @node mathAusdruck
  558. @TITLE "Mathematischer Ausdruck der IF- und ELIF-Direktiven"
  559. @TOC Inhaltsverzeichnis
  560. @PREV Direktiven
  561. @NEXT Direktiven
  562.  NAP  unterst
  563. tzt  Addition,  Subtraktion,  Multiplikation,  Division
  564.  (ganzzahlig und mit Rest) sowie Klammerrechnung.  Die  Rechenzeichen
  565.  sind identisch mit denen von ACE.  Der  Ausdruck  wird  mathematisch
  566.  korrekt berechnet (Klammer- vor Punkt- vor Strichrechnung).
  567.  Das Ergebnis ist im ACE-Format SINGLE (REAL).  Aus diesem Grund sind
  568.  geringe Abweichungen beim Ergebnis m
  569. glich.
  570.  ACHTUNG: 1/3 * 3 - 1 ist mathematisch 0, durch die Ungenauigkeit von
  571.           SINGLE ist das Ergebnis bei NAP aber -0.0000001.
  572.  Das Zahlenformat ist Dezimal. Wollen Sie Hexadezimal- oder Bin
  573. rzah-
  574.  len verwenden, so m
  575. ssen Sie ihnen das ACE-spezifische Pr
  576. fix voran-
  577.  stellen.
  578. @endnode
  579. @node bugs
  580. @TOC Inhaltsverzeichnis
  581. @PREV Direktiven
  582. @NEXT Future
  583. @TITLE "Bekannte Fehler"
  584.  * Aufgrund der Verwendung von SINGLE k
  585. nnen die bei der IF- und ELIF
  586.    Direktive erhaltenen Werte geringf
  587. gig abweichen. (@{"Bsp" link mathAusdruck})
  588.  * ELIF-Direktiven sind extrem fehleranf
  589. llig.  Am besten, Sie lassen
  590.    die Finger davon, bis der Fehler behoben ist.  ELSE  ist  da schon
  591.    sicherer,  es sei denn,  es wird zusammen  mit ELIF verwendet oder
  592.    nach einer  IF-Direktive  zweimal  aufgerufen  (was dann aber Ihre
  593.    Schuld w
  594.  * Falls auf Strukturen nur 
  595. ber SIZEOF zugesprochen wird,  sie  aber
  596.    nicht deklariert werden (auch nicht indirekt), werden diese Struk-
  597.    turen entfernt (nat
  598. rlich nur mit Option @{"-s" link OptionS}).
  599.    Umgehung des Fehlers:
  600.      Struktur einfach deklarieren:
  601.          DECLARE STRUCT <struct-name> *dummyptr
  602.      Es wird so gut wie kein Speicher verschwendet (4 Bytes) !!!
  603.  Falls Sie noch Fehler finden, dann schreiben Sie @{"mir" link autor} bitte umgehend,
  604.  damit ich den Fehler so schnell wie m
  605. glich entfernen kann !! (siehe
  606.  @{"History" link history} f
  607. r bereits entfernte Fehler)
  608. @endnode
  609. @node future
  610. @TOC Inhaltsverzeichnis
  611. @PREV bugs
  612. @NEXT Greetings
  613. @TITLE "Zuk
  614. nftige Versionen"
  615.  Meine Pl
  616. ne, was in den n
  617. chsten Versionen verwirklicht werden k
  618.  te.  Die bei  Version 1.1 aufgef
  619. hrten Punkte wurden 
  620. brigens so gut
  621.  wie alle hier umgesetzt!
  622.  * entfernen der @{"Fehler" link bugs}
  623.  * Unterst
  624. tzung weiterer @{"Direktiven" link Direktiven}
  625.  * weitere Optionen (siehe Anleitung von ACPP)
  626.  * weitere Geschwindigkeitssteigerungen
  627.  * ...
  628.  Ihre Ideen sind nat
  629. rlich auch gefragt.  Wenn Sie welche haben, dann
  630.  schreiben Sie sie @{"mir" link autor} doch. Danke sch
  631. @endnode
  632. @node greetings
  633. @TOC Inhaltsverzeichnis
  634. @PREV future
  635. @NEXT Copyright
  636. @TITLE "Danksagungen und Gr
  637.  Danke geht an ...
  638.   David Benn, Autor von ACE, f
  639. r seine Hilfe und seinen Rat bei eini-
  640.   gen Problemen sowie daf
  641. r, da
  642.  er ACE entwickelt hat.
  643.   Herbert Breuer  f
  644. r seine  Hilfe bei den  Assemblerroutinen und f
  645.   Hinweise und Ratschl
  646. ge. Desweiteren Danke daf
  647. r, da
  648.  er seine Zeit
  649.   geopfert hat,  um  NAP  zu  testen.  S
  650. mtliche Bugs, soweit ich sie
  651.   nicht bereits vorher gefunden hatte, wurden von ihm entdeckt.
  652.   (Kein Wunder, er ist ja auch der einzige Benutzer. Oder alle ander-
  653.    en halten sich nicht an das, was im Kapitel @{"Copyright" link Copyright} steht!)
  654.   all die  User,  die NAP noch benutzen werden  und  
  655. ber  eventuelle
  656.   @{"M
  657. ngel" link bugs} gro
  658. gig hinwegsehen.
  659. @endnode
  660. @node Copyright
  661. @TOC Inhaltsverzeichnis
  662. @PREV Greetings
  663. @NEXT Autor
  664.  NAP - New ACE Preprocessor                              Version 2.02
  665.                                                           19.05.1997
  666.  Diese Version von  NAP,  sowie alle @{"vorausgehenden" link history},  unterstehen dem
  667.  Copyright von @{"Daniel Seifert" link autor}.
  668.  NAP ist Cardware.  Das hei
  669. t, da
  670.  der Autor von den Benutzern seines
  671.  Programmes  nichts  weiter  verlangt,  als da
  672.  sie ihm einmalig eine
  673.  Postkarte schicken (vielleicht mit einer besonders sch
  674. nen Briefmar-
  675.  ke :-) und ihm mitteilen, wie ihnen NAP gef
  676.  All diejenigen, die sich  daran halten,  haben das Recht, NAP zu ko-
  677.  pieren und weiterzuverbreiten (kostenlos!).  Dabei m
  678. ssen aber s
  679.  liche Dateien im Originalzustand verbleiben und es d
  680. rfen auch keine
  681.  Dateien entfernt werden.
  682. nderungen des Sourcecodes (der bis Version 2.01 beilag),  sind  nur
  683. r den eigenen Gebrauch zul
  684. ssig. Eine Weiterverbreitung der  ge
  685.  derten Version ist vom Autor nicht stattgegeben.  (Wer aber der Mei-
  686.  nung ist,  etwas  besonders wichtiges ge
  687. ndert/dazugef
  688. gt/verbessert
  689.  zu haben, kann  sich nat
  690. rlich  gern  mit mir in Kontakt setzen.  Es
  691.  wird sich dann zeigen, ob das dann in die n
  692. chste offizielle Version
  693.  mit einflie
  694.  Ab  Version  2.02  wird  der  Sourcecode nicht mehr beigelegt,  eine
  695. bersetzung (Disassemblierung) ist nicht gesattet !
  696.  Ansonsten gilt:
  697.    Obwohl NAP ausf
  698. hrlich getestet wurde, kann keine Garantie 
  699.    nommen werden,  da
  700.  NAP funktionsgerecht arbeitet.  Sie benutzen
  701.    es  auf  eigenes  Risiko.  F
  702. r eventuelle Sch
  703. den wird vom Autor
  704.    keine Haftung 
  705. bernommen.
  706.                                                        Daniel Seifert
  707.                                                          19.05.1997
  708. @endnode
  709. @node Autor
  710. @TOC Inhaltsverzeichnis
  711. @PREV Copyright
  712. @NEXT History
  713. (B) Contacting the author
  714. My name is Daniel Seifert and I'm born in 1978. At the moment I'm
  715. studying  at  the  "1st  Grammar  School  Hellersdorf"  (Leonard-
  716. Bernstein-Gymnasium) whereas Hellersdorf is the eastermost suburb
  717. of Berlin  which is the capital of Germany, as you probably know,
  718. don't you?
  719. My favourite subjects are Maths, English and,  of course,  compu-
  720. ting.
  721. If you want to contact me, there are three possibilities:
  722.  (a) E-Mail (preferred, except for the picture card! :-)
  723.      You can reach me at my school: dseifert@hell1og.be.schule.de
  724.                                     -----------------------------
  725.      Please  give  me  some  time to answer -> holidays, exams or
  726.      problems with the school computer (no Amiga :(
  727.      After June '98 this EMail address might have gone (hm, well,
  728.      if not I have a little problem ;-)  so  use the  snail  mail
  729.      address instead to ask for my  new address  (or look out for
  730.      new programs by me ;)
  731.      WWW
  732.      Well, as  of  now  I do not have my own home page :-( But if
  733.      you are interested in a (German) math corner, which I helped
  734.      to create, take a look at :
  735.             http://members.aol.com/fuzzymathe/index.htm
  736.  (b) snail mail
  737.      Please do only expect an answer if you enclose  some  money
  738.      for my costs (postage, ...). I am a little bit out of money
  739.      (aren't student always ? ;-)) so I just don't want to spend
  740.      my money on this.
  741.      (Err, I almost forgot my address ;-)
  742.               Daniel Seifert
  743.               Elsenborner Weg 25
  744.               12621 Berlin
  745.               GERMANY
  746.  (c) telephone
  747.      Well, I cannot imagine that anybody wants to contact me
  748.      this way. But anyway: call (+49) 030 5669471 and ask
  749.      for Daniel.                      ^ Berlin
  750.                                  ^ Germany (at least I hope so)
  751. Happy ACEing ;)
  752. @endnode
  753. @node History
  754. @TOC Inhaltsverzeichnis
  755. @PREV Autor
  756.  RemoveStuff (Vorg
  757. nger von NAP)
  758.  Version 1.0 :
  759.    - 17.02.1996 : Entfernen von ACE-Kommentaren
  760.    - 18.02.1996 : Entfernen von unbenutzten Strukturen
  761.    - 22.02.1996 : Betaversion fertig
  762.    - 26.02.1996 : Pass zwei wird nun im Speicher abgewickelt. Dadurch
  763.                   wird das ganze drastisch schneller.
  764.    - 27.02.1996 : fertig
  765.  Version 1.0 :
  766.    - 02.03.1996 - 17.03.1996 :
  767.                   Bearbeiten von #INCLUDE Anweisungen,  Entfernen von
  768.                   C-Kommentaren, Defines werden als CONST geschrieben
  769.  Version 1.1 :
  770.    - 23.03.1996 : Anzeige der aktuellen Datei verbessert
  771.    - 28.03.1996 : Dateien k
  772. nnen nun auch von anderen  Verzeichnissen
  773.                   included werden und nicht nur von ACEINCLUDE:
  774.    - 29.03.1996 : Optimierungen
  775.    - 18.03.1996 - 27.03.1996 :
  776.                   Eigene  INSTR-Routine  in Assembler geschrieben und
  777.                   ein Subprogramm ebenfalls in Assembler neugeschrie-
  778.                   ben.
  779.    - 04.04.1996 : Einbau der Assemblerroutinen nach kleineren Proble-
  780.                   men endlich geschafft
  781.    - 07.04.1996 : Optimierungen und Neuschreibung der LEGAL-Routine
  782.  Version 2.00 :
  783.    - 19.06.1996 : Unterst
  784. tzung der DEFINE-Direktive
  785.    - 20.06.1996 : jetzt auch mit Parametern
  786.    - 23.06.1996 : Bug gefunden, am 24.06.1996 behoben
  787.    - 25.06.1996 : Code wurde so gro
  788.  ich ihn in zwei Teile auf-
  789.                   teilen mu
  790.    - 28.06.1996 : Benutzung von xRead/xWrite anstatt von PRINT/INPUT
  791.    - 29.06.1996 : LEGAL-Routine in Assembler neugeschrieben
  792.    - 01.07.1996 : IsAlreadyInList-Routine in Assembler neugeschrieben
  793.    - 12.07.1996 : NAP benutzt nun _List und Node aus EXEC/LISTS.H und
  794.                   EXEC/NODES.H  anstatt  meiner  eigenen  verketteten
  795.                   Listen.  Deshalb k
  796. nnen jetzt auch die daf
  797. r vorge-
  798.                   sehenen Betriebssystemfunktionen benutzt werden.
  799.    - 16.07.1996 : alle ="" und <>"" durch PEEK/POKE = 0 oder <> 0 er-
  800.                   setzt
  801.    - 17.07.1996 : Lese-Routine erh
  802. lt 255-Byte Buffer
  803.    - 19.07.1996 : UNDEF-Direktive wird von nun an unterst
  804.    - 22.07.1996 : Lese-Routine neugeschrieben
  805.    - 23.07.1996 : die  Aufgabenverteilung  der  Subprogramme ge
  806. ndert
  807.                   (Entfernen von Kommentaren nun in AddToTemp)
  808.    - 24.07.1996 : Fehler in der Lese-Routine entfernt
  809.    - 25.07.1996 : dt. Anleitung geschrieben
  810.    - 26.07.1996 : englische Anleitung geschrieben
  811.    - 02.08.1996 : Optionen p,  u  und d eingebaut,  Unterst
  812. tzung der
  813.                   Direktiven IF DEFINED, ELSE, IFNDEF und IFDEF
  814.    - 04.08.1996 : schrieb Unterprogramm ParseExpr  (berechnet  mathe-
  815.                   matische Ausdr
  816. cke), Unterst
  817. tzung von IF und ELIF
  818.    - 25.08.1996 : Fehler in ParseExpr entfernt
  819.    - 01.09.1996 : Tabulatoren sind jetzt im Quellcode erlaubt
  820.    - 03.09.1996 : Optionen z und t eingebaut
  821.    - 04.09.1996 : Option l eingebaut
  822.    - 08.09.1996 : schrieb  AmigaGuide-Anleitungen  und 
  823. nderte USAGE-
  824.                   Anzeige
  825.    - 24.09.1996 : Division durch 0  und weiterer Fehler aus ParseExpr
  826.                   entfernt, verschachtelte Klammern sind nun 
  827. brigens
  828.                   auch erlaubt.
  829.                   fertig
  830.  Version 2.01 :
  831.    - 27.09.1996 : Herbert Breuer berichtete einen Bug: wenn -b64 dann
  832.                   wird die Datei nicht bis zum Ende bearbeitet.
  833.    - 01.10.1996 : Option t erweitert, einen weiteren Bug gefunden und
  834.                   behoben (die Variable inComment wurde auch gesetzt,
  835.                   wenn "{" in einem String war, da die Anweisung dazu
  836.                   au
  837. erhalb der entsprechenden IF-Anweisung war)
  838.    - 03.10.1996 : fand den Grund f
  839. r den Fehler, den Herbert fand: da
  840.                   ich nur immer Sorgen hatte, da
  841.  kleinere Buffergr
  842.                   
  843. en nicht funktionieren habe ich -b64 nie getestet,
  844.                   -b32 lief ja immer.  Aber da ich meine eigene Lese-
  845.                   Routine verwende, mu
  846.  ich im Buffer abspeichern, wo
  847.                   der Cursor gerade steht. Das wird in zwei Bytes ge-
  848.                   macht.  Zuerst wurde das "von Hand" codiert  (0 bis
  849.                   65536 m
  850. glich),  sp
  851. ter aber  durch  POKEW  ersetzt
  852.                   (-32767 bis +32768 m
  853. glich). Dadurch  funktionieren
  854.                   nat
  855. rlich nur Buffer bis zu einer Gr
  856. e von 32  Ki-
  857.                   lobyte.  Das wurde behoben,  indem  jetzt POKEL und
  858.                   vier Bytes benutzt werden.
  859.    - 04.10.1996 : schrieb neue Anleitung
  860.    - 07.10.1996 : fertig
  861.  Version 2.02 :
  862.    - 31.03.1997 -
  863.      06.04.1997 : Optimierungen,  einige Optionen  haben jetzt andere
  864.                   Default-Einstellungen.
  865.    - ?          : weitere Geschwindigkeitssteigerungen
  866.    - 20.04.1997 : Anleitung erg
  867. nzt und Zeigerfehler entfernt.
  868.    - 06.05.1997 : Fehler entfernt: beim Check, ob der Text in "" ist,
  869.                   wurde beim Finden des schlie
  870. enden " wieder ein Byte
  871.                   zur
  872. ckgegangen, soda
  873.  es nochmal gelesen wurde ...
  874.    - 09.05.1997 : einige Bugs gefunden (beim Parsen von Macros)  und
  875.                   die Routine zum Umwandeln der C- in ACE-Kommentare
  876.                   neugeschrieben
  877.    - 10.05.1997 : um Option -x erweitert
  878.    - 19.05.1997 : neucompiliert (mit SuperOptimizer und PhxAss OPT)
  879. @endnode
  880.